const db = uniCloud.database()
const dbCmd = db.command
module.exports = {
	_before: function() { // 通用预处理器

	},
	async QBPay(list = [], user_id, address = {}, total = 0) {
		//网络是不稳定的
		//可能你支付过钱了 但是 数据库更新的时候代码运行出现状况了 没有生成商品订单
		//在数据库使用事务这一技术(你更新数据的时候 只有一点问题 就撤销所有的操作)
		//开启阿里云事务
		const transaction = await db.startTransaction()
		try {
			let time = Date.now()
			//开始事务以后后面的数据库操作有一个错误 所有的操作都将撤销
			//(1)扣除用户余额
			let userRes = await transaction.collection('uni-id-users').doc(user_id).get()
			if (userRes.data) {
				const updateUserMoney = await transaction.collection('uni-id-users').doc(user_id).update({
					money: dbCmd.inc(-total)
				})
				//添加订单
				const addOrder = await transaction.collection('order').add({
					type: "商品订单",
					pay_type: "QB",
					total_fee: total,
					user_id: user_id,
					platform: "h5",
					status: 2,
					wait_status: 1,
					address: address,
					goods_list: list,
					create_time: time, //时间
					update_time: time, //时间
					paid_time: time, //时间
				})
				//提交正常的数据库操作
				const updateUserRes = await transaction.collection('uni-id-users').doc(user_id).get();
				if (updateUserRes.data.money < 0) { //钱扣超了 回滚操作
					await transaction.rollback(-100)
					return {
						success: false,
						error: `rollback`,
						rollbackCode: -100,
					}
				} else {
					await transaction.commit()
				}
				return {
					success: true
				}
			} else {
				await transaction.rollback()
				return {
					success: false,
					error: `rollback`,
					rollbackCode: -100,
				}
			}
		} catch (e) {
			//等待事务回滚操作
			await transaction.rollback()
			return {
				success: false,
				error: e
			}
		}
	}
}
